# from langchain.schema import HumanMessage, SystemMessage
# from langchain.chat_models.gigachat import GigaChat
#
# # Авторизация в сервисе GigaChat
# chat = GigaChat(
#     credentials=giga_api,
#     verify_ssl_certs=False,
#     scope='GIGACHAT_API_CORP'
# )
#
# messages = [
#     SystemMessage(
#         content="Ты эмпатичный бот-психолог, который помогает пользователю решить его проблемы."
#     )
# ]
#
# while(True):
#     user_input = input("User: ")
#     messages.append(HumanMessage(content=user_input))
#     res = chat(messages)
#     messages.append(res)
#     # Ответ модели
#     print("Bot: ", res.content)
import textwrap
from langchain.chat_models.gigachat import GigaChat
from langchain.schema import AIMessage, HumanMessage, SystemMessage
from dotenv import load_dotenv
import os
load_dotenv()
giga_api = os.getenv('GIGA_API')

llm1 = GigaChat(
    credentials=giga_api,
    verify_ssl_certs=False,
    scope='GIGACHAT_API_CORP'
)
llm2 = GigaChat(
    credentials=giga_api,
    verify_ssl_certs=False,
    scope='GIGACHAT_API_CORP'
)
resolve_llm = GigaChat(
    credentials=giga_api,
    verify_ssl_certs=False,
    scope='GIGACHAT_API_CORP'
)

discuss = "что было раньше - яйцо или курица?"


def get_prompt(goal):
    return f"""Ты участвуешь в споре о том, {discuss}
{goal}
Пиши очень коротко и только один аргумент. Ни за что не соглашайся с оппонентом.
Ни в коем случае не поторяй свои аргументы и фразы из предыдущего диалога!
Каждый раз приводи новый аргумент или критикуй аргумент оппонента."""


yandex_system = get_prompt("Ты должен убедить собеседника, что первым было яйцо.")
print(f"\033[35mYandex system: {yandex_system}\033[0m")

giga_system = get_prompt("Ты должен убедить собеседника, что первым была курица.")
print(f"\033[32mGiga ystem: {giga_system}\033[0m")

refery_queston = f"""Ты рефери в споре о том, {discuss}
Прочитай диалог и определи победителя в споре.
Диалог:
"""


def discuss(length=3):
    dialog_as_text = []
    yandex_memory = [SystemMessage(content=yandex_system)]
    giga_memory = [SystemMessage(content=giga_system)]

    for i in range(length):
        b1_message = llm2(yandex_memory).content

        print(f"""\033[35mYandex: {textwrap.fill(b1_message, 120)}\033[0m""")
        dialog_as_text.append(f"Yandex: {b1_message}")
        if "ЧЕЛОВЕК" in b1_message or "БОТ" in b1_message:
            return
        yandex_memory.append(AIMessage(content=b1_message))
        giga_memory.append(HumanMessage(content=b1_message))
        b2_message = llm1(giga_memory).content

        print(f"""\033[32mGiga: {textwrap.fill(b2_message, 120)}\033[0m""")
        dialog_as_text.append(f"Giga: {b2_message}")
        yandex_memory.append(HumanMessage(content=b2_message))
        giga_memory.append(AIMessage(content=b2_message))

    result = resolve_llm(
        [HumanMessage(content=refery_queston + "\n".join(dialog_as_text))]
    ).content
    print(f"Судья (GPT-4): {textwrap.fill(result, 120)}")
